home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume6 / vt100tool / part10 < prev    next >
Encoding:
Internet Message Format  |  1986-11-30  |  28.1 KB

  1. Subject: v06i069:  VT100TOOL for Sun's (vt100tool), Part10/10
  2. Newsgroups: mod.sources
  3. Approved: rs@mirror.UUCP
  4.  
  5. Submitted by: linus!ell (Ed Lafferty)
  6. Mod.sources: Volume 6, Issue 69
  7. Archive-name: vt100tool/Part10
  8.  
  9. [  I generally dislike posting anything other than source code.  In this
  10.    case, however, I'm making an exception because (a) there's no other
  11.    way to do it; and (b) there is apparently a lot of demand for this
  12.    program.  So, I took the object and data files in the fontdir and
  13.    libdir directories and uuencode'd them.  The decode.sh script in the
  14.    toplevel directory will uudecode them and remove the uu.xxx files;
  15.    the lists the files by name, so you can check if you're missing
  16.    something.  This comment will appear at the beginning of each of the
  17.    postings of this program.  --r$  ]
  18.  
  19.  
  20. #!/bin/sh
  21. # This is a shell archive.  Remove anything before this line,
  22. # then unpack it by saving it in a file and typing "sh file".
  23. # Wrapped by rs@mirror.UUCP on Thu Jul 17 00:22:53 EDT 1986
  24. # Contents:  vt100tool.c
  25.  
  26. echo x - vt100tool.c
  27. sed 's/^XX//' > "vt100tool.c" <<'@//E*O*F vt100tool.c//'
  28. XX#ifndef lint
  29. XXstatic    char sccsid[] = "@(#)vt100tool.c 1.3 86/04/15 Copyr 1985 MITRE Corp.";
  30. XX#endif
  31.  
  32.  
  33. XX/*
  34. XX * MITRE Corp. Bedford, MA
  35. XX */
  36.  
  37. XX/*
  38. XX *     Overview:    panelvttool: A shell subwindow emulating
  39. XX *                        a vt100 terminal
  40. XX *
  41. XX */
  42.  
  43. XX/*
  44. XX *      Author: Edward L. Lafferty
  45. XX */
  46.  
  47. XX#include <suntool/tool_hs.h>
  48.  
  49. XX#include <suntool/ttysw.h>
  50. XX#include <stdio.h>
  51. XX#include <suntool/panel.h>
  52. XX#include "vconfig.h"
  53. XX#include <suntool/ttysw_impl.h>
  54. XXstatic short ic_image[258] = {
  55. XX#include "vshelltool.icon"
  56. XX};
  57.  
  58. XX#include <suntool/ttytlsw.h>
  59. XX#include <sunwindow/window_hs.h>
  60. XX#include <pixrect/pixrect_hs.h>
  61. XX#include <sundev/kbio.h>
  62. XX#include <sundev/kbd.h>
  63.  
  64.  
  65. XXextern int winheightp, winwidthp;
  66.  
  67. XXmpr_static(shellic_mpr, 64, 64, 1, ic_image);
  68.  
  69. XXstatic    struct icon icon = {64, 64, (struct pixrect *)NULL, 0, 0, 64, 64,
  70. XX        &shellic_mpr, 0, 0, 0, 0, (char *)NULL, (struct pixfont *)NULL,
  71. XX        ICON_BKGRDGRY};
  72.  
  73.  
  74. XX        static    sigwinchcatcher(), sigchldcatcher(),
  75. XX            sigtermcatcher(),setup_proc(), keyboard_proc(), button_proc();
  76.  
  77. XXstatic    struct tool *tool;
  78. XXstruct toolsw *ttysw;
  79.  
  80. XXstatic  struct toolsw *setupsw, *arrowsw, *keypadsw, *normkeysw;
  81. XXstatic struct singlecolor scr_foreground = {100,100,100};
  82. XXstatic struct singlecolor scr_background = {0, 0, 0};
  83. XXstatic  caddr_t setup_button, keyboard_button;
  84.  
  85. XXstatic  caddr_t  local_choice, scroll_choice, screen_choice,
  86. XX                    cursor_choice,xon_choice,ansi_choice,wrap_choice,
  87. XX            newline_choice, size_choice, answerback_text, baud_rate,
  88. XX            label_choice;
  89. XXstatic  caddr_t  PF1_button, PF2_button, PF3_button, PF4_button, R1_button,
  90. XX         R2_button,R3_button,R4_button,R5_button,R6_button,
  91. XX         R7_button,R8_button,R9_button,R0_button,enter_button,
  92. XX         dot_button,comma_button,up_button,down_button,
  93. XX         left_button,right_button, minus_button;
  94.  
  95.  
  96. XXstatic  local_proc(), scroll_proc(), screen_proc(),
  97. XX            cursor_proc(),xon_proc(),ansi_proc(),wrap_proc(),
  98. XX            newline_proc(), size_proc(), baud_rate_proc(),
  99. XX            answer_proc(), label_proc(), norm_proc();
  100.  
  101. XXstatic    char *normalname = "VT100 Shell 2.0";
  102. XXstatic  Panel setup, arrow, keypad, normkey;
  103. XXstatic struct pixfont *font;
  104.  
  105. XX/* so we can set locally
  106. XX   and still inform the emulator*/
  107. XXextern int newline, wrap,cursor,vt52mode,big_screen,rev_screen, local;
  108. XXextern char  answer_message[];
  109.  
  110. XX/* defined in the emulator */
  111. XXextern char* translate_key();
  112. XXextern char main_font_directory[];
  113.  
  114. XXmain(argc, argv)
  115. XX    int argc;
  116. XX    char **argv;
  117. XX{
  118. XX    char    *toolname = normalname;
  119. XX    char *tool_name = argv[0];
  120. XX    char **tool_attrs = NULL;
  121.  
  122.  
  123. XX    if(tool_parse_all(&argc,argv,&tool_attrs, tool_name) == -1)
  124. XX      {
  125. XX        tool_usage(tool_name);
  126. XX        exit(1);
  127. XX      }
  128. XX    /*
  129. XX     * Create tool window
  130. XX     */
  131. XX    tool = tool_make(WIN_NAME_STRIPE,TRUE,
  132. XX             WIN_ICON, &icon,
  133. XX             WIN_LABEL,normalname,
  134. XX             WIN_COLUMNS,83,
  135. XX             WIN_WIDTH, 680,
  136. XX             WIN_HEIGHT, 600,
  137. XX             0);
  138.  
  139. XX    tool_free_attribute_list(tool_attrs);
  140. XX    /*
  141. XX     * Create tty subwindow
  142. XX     * Libsuntool now has vt100 code instead of ansi
  143. XX     * Communicate with emulator via envirionment variable VTFONTS
  144. XX     */
  145. XX    setenv("VTFONTS", MAIN_FONT_DIR); 
  146. XX    ttysw = ttysw_createtoolsubwindow(tool, "ttysw", TOOL_SWEXTENDTOEDGE,
  147. XX        384);
  148. XX    if (ttysw == (struct toolsw *)NULL)
  149. XX        exit(1);
  150. XX    
  151. XX    setupsw = panel_create(tool, 0);
  152. XX    setup   = (Panel) setupsw->ts_data;
  153.  
  154. XX    strcpy(main_font_directory,MAIN_FONT_DIR);
  155.  
  156. XX    /* create the items for setup of vt100 screen */
  157. XX    setup_button = panel_create_item(setup,PANEL_BUTTON,
  158.  
  159. XX                     PANEL_NOTIFY_PROC,setup_proc,
  160.  
  161. XX                     PANEL_LABEL_IMAGE,
  162. XX                     panel_button_image(setup,
  163. XX                                "Setup",
  164. XX                                7,
  165. XX                                NULL ),
  166. XX                     0);
  167.  
  168. XX    /* Set up the mouse driven keyboard */
  169.  
  170. XX    keyboard_button = panel_create_item(setup,PANEL_BUTTON,
  171. XX                        PANEL_NOTIFY_PROC,keyboard_proc,
  172. XX                        PANEL_LABEL_IMAGE,
  173. XX                        panel_button_image(setup,
  174. XX                                   "Keyboard",
  175. XX                                8,
  176. XX                                NULL ),
  177. XX                     0);
  178. XX    label_choice = panel_create_item(setup, PANEL_CHOICE,
  179. XX                     PANEL_SHOW_ITEM, TRUE,
  180. XX                     PANEL_LABEL_STRING, "Key Labels",
  181. XX                     PANEL_CHOICE_STRINGS,"Normal", "IBM",
  182. XX                                 "MRED","WD11",
  183. XX                     0,
  184. XX                     PANEL_NOTIFY_PROC, label_proc,
  185. XX                     PANEL_DISPLAY_LEVEL, PANEL_ALL,
  186. XX                     PANEL_FEEDBACK, PANEL_INVERTED,
  187. XX                     0);
  188.  
  189.  
  190. XX    local_choice = panel_create_item(setup,PANEL_CHOICE,
  191. XX        PANEL_SHOW_ITEM, FALSE,
  192. XX        PANEL_CHOICE_STRINGS,"Online","Local",0,
  193. XX        PANEL_NOTIFY_PROC, local_proc,
  194. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  195. XX                         0);
  196.  
  197. XX    scroll_choice = panel_create_item(setup,PANEL_CHOICE,
  198. XX        PANEL_SHOW_ITEM, FALSE,
  199. XX        PANEL_CHOICE_STRINGS,"Smooth","Jump",0,
  200. XX        PANEL_NOTIFY_PROC, scroll_proc,
  201. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  202. XX                         0);
  203.  
  204. XX    screen_choice = panel_create_item(setup,PANEL_CHOICE,
  205. XX        PANEL_SHOW_ITEM, FALSE,
  206. XX        PANEL_CHOICE_STRINGS,"Dark","Light",0,
  207. XX        PANEL_NOTIFY_PROC, screen_proc,
  208. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  209. XX                         0);
  210.  
  211. XX    cursor_choice = panel_create_item(setup,PANEL_CHOICE,
  212. XX        PANEL_SHOW_ITEM, FALSE,
  213. XX        PANEL_CHOICE_STRINGS,"Block","Under",0,
  214. XX        PANEL_NOTIFY_PROC, cursor_proc,
  215. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  216. XX                         0);
  217.  
  218. XX    xon_choice = panel_create_item(setup,PANEL_CHOICE,
  219. XX        PANEL_SHOW_ITEM, FALSE,
  220. XX        PANEL_CHOICE_STRINGS,"Xon","No-xon",0,
  221. XX        PANEL_NOTIFY_PROC, xon_proc,
  222. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  223. XX                         0);
  224.  
  225. XX    wrap_choice = panel_create_item(setup,PANEL_CHOICE,
  226. XX        PANEL_SHOW_ITEM, FALSE,
  227. XX        PANEL_CHOICE_STRINGS,"No Wrap","Wrap",0,
  228. XX        PANEL_NOTIFY_PROC, wrap_proc,
  229. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  230. XX                         0);
  231.  
  232. XX    newline_choice = panel_create_item(setup,PANEL_CHOICE,
  233. XX        PANEL_SHOW_ITEM, FALSE,
  234. XX        PANEL_CHOICE_STRINGS,"Newline","No Newline",0,
  235. XX        PANEL_NOTIFY_PROC, newline_proc,
  236. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  237. XX                         0);
  238.  
  239. XX    ansi_choice = panel_create_item(setup,PANEL_CHOICE,
  240. XX        PANEL_SHOW_ITEM, FALSE,
  241. XX        PANEL_CHOICE_STRINGS,"ANSI","VT-52",0,
  242. XX        PANEL_NOTIFY_PROC, ansi_proc,
  243. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  244. XX                         0);
  245.  
  246. XX    size_choice = panel_create_item(setup,PANEL_CHOICE,
  247. XX        PANEL_SHOW_ITEM, FALSE,
  248. XX        PANEL_CHOICE_STRINGS,"80 Col","132 Col",0,
  249. XX        PANEL_NOTIFY_PROC, size_proc,
  250. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  251. XX                         0);
  252. XX    answerback_text = panel_create_item(setup,PANEL_TEXT,
  253. XX        PANEL_SHOW_ITEM, FALSE,
  254. XX        PANEL_LABEL_STRING, "Answerback:",
  255. XX                PANEL_NOTIFY_LEVEL, PANEL_NONE,
  256. XX        PANEL_VALUE, "",
  257. XX                PANEL_VALUE_DISPLAY_LENGTH, 20,
  258. XX        0);
  259. XX/*    baud_rate = panel_create_item(setup, PANEL_CHOICE,
  260. XX            PANEL_LABEL_STRING, "Baud RATE",
  261. XX                PANEL_CHOICE_STRINGS,"75","110","150","300","600","1200",
  262. XX                      "2400","4800","9600", "19200",0,
  263. XX                PANEL_NOTIFY_PROC, baud_rate_proc,
  264. XX        PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  265. XX                PANEL_SHOW_ITEM,FALSE,
  266. XX                0);
  267. XX*/
  268.  
  269. XX    panel_set(setup,
  270. XX          PANEL_HEIGHT, PANEL_FIT_ITEMS,
  271. XX          PANEL_WIDTH, PANEL_CU(80),
  272. XX          0);
  273.  
  274. XX    /* Set up keypad */
  275. XX    /* Client data item is used by key process to determine which
  276. XX       key was moused. */
  277.  
  278. XX    keypadsw = panel_create(tool,
  279. XX                PANEL_HEIGHT, PANEL_CU(27),
  280. XX                PANEL_WIDTH, PANEL_CU(30),   
  281. XX                PANEL_ITEM_X_GAP,1,
  282. XX                PANEL_ITEM_Y_GAP,1,
  283. XX                0);
  284. XX    keypad = (Panel) keypadsw->ts_data;
  285.  
  286. XX    PF1_button = panel_create_item(keypad, PANEL_BUTTON,
  287. XX                       PANEL_SHOW_ITEM, FALSE,
  288. XX                       PANEL_CLIENT_DATA, (int)11,
  289. XX                       PANEL_NOTIFY_PROC, button_proc,
  290. XX                       PANEL_LABEL_IMAGE,
  291. XX                       panel_button_image(keypad,
  292. XX                              "PF1",
  293. XX                              5,
  294. XX                              NULL),
  295. XX                       0);
  296.  
  297. XX    PF2_button = panel_create_item(keypad, PANEL_BUTTON,
  298. XX                       PANEL_SHOW_ITEM, FALSE,
  299. XX                       PANEL_CLIENT_DATA, (int)12,
  300. XX                       PANEL_NOTIFY_PROC, button_proc,
  301. XX                       PANEL_LABEL_IMAGE,
  302. XX                       panel_button_image(keypad,
  303. XX                              "PF2",
  304. XX                              5,
  305. XX                              NULL),
  306. XX                       0);
  307. XX    PF3_button = panel_create_item(keypad, PANEL_BUTTON,
  308. XX                       PANEL_SHOW_ITEM, FALSE,
  309. XX                       PANEL_CLIENT_DATA, (int)13,
  310. XX                    PANEL_NOTIFY_PROC, button_proc,
  311. XX                    PANEL_LABEL_IMAGE,
  312. XX                    panel_button_image(keypad,
  313. XX                               "PF3",
  314. XX                               5,
  315. XX                               NULL),
  316. XX                    0);
  317.  
  318. XX    PF4_button = panel_create_item(keypad, PANEL_BUTTON,
  319. XX                       PANEL_SHOW_ITEM, FALSE,
  320. XX                       PANEL_CLIENT_DATA, (int) 14,
  321. XX                    PANEL_NOTIFY_PROC, button_proc,
  322. XX                    PANEL_LABEL_IMAGE,
  323. XX                    panel_button_image(keypad,
  324. XX                               "PF4",
  325. XX                               5,
  326. XX                               NULL),
  327. XX                    0);
  328.  
  329. XX    R7_button = panel_create_item(keypad, PANEL_BUTTON,
  330. XX                      PANEL_SHOW_ITEM, FALSE,
  331. XX                      PANEL_CLIENT_DATA, 7,
  332. XX                    PANEL_NOTIFY_PROC, button_proc,
  333. XX                    PANEL_LABEL_IMAGE,
  334. XX                    panel_button_image(keypad,
  335. XX                               "7",
  336. XX                               5,
  337. XX                               NULL),
  338. XX                    0);
  339.  
  340. XX    R8_button = panel_create_item(keypad, PANEL_BUTTON,
  341. XX                      PANEL_SHOW_ITEM, FALSE,
  342. XX                      PANEL_CLIENT_DATA, 8,
  343. XX                    PANEL_NOTIFY_PROC, button_proc,
  344. XX                    PANEL_LABEL_IMAGE,
  345. XX                    panel_button_image(keypad,
  346. XX                               "8",
  347. XX                               5,
  348. XX                               NULL),
  349. XX                    0);
  350.  
  351. XX    R9_button = panel_create_item(keypad, PANEL_BUTTON,
  352. XX                      PANEL_SHOW_ITEM, FALSE,
  353. XX                      PANEL_CLIENT_DATA, 9,
  354. XX                    PANEL_NOTIFY_PROC, button_proc,
  355. XX                    PANEL_LABEL_IMAGE,
  356. XX                    panel_button_image(keypad,
  357. XX                               "9",
  358. XX                               5,
  359. XX                               NULL),
  360. XX                    0);
  361.  
  362. XX    minus_button = panel_create_item(keypad, PANEL_BUTTON,
  363. XX                     PANEL_SHOW_ITEM, FALSE,
  364. XX                     PANEL_CLIENT_DATA, 15,
  365. XX                    PANEL_NOTIFY_PROC, button_proc,
  366. XX                    PANEL_LABEL_IMAGE,
  367. XX                    panel_button_image(keypad,
  368. XX                               "-",
  369. XX                               5,
  370. XX                               NULL),
  371. XX                    0);
  372.  
  373. XX    R4_button = panel_create_item(keypad, PANEL_BUTTON,
  374. XX                      PANEL_SHOW_ITEM, FALSE,
  375. XX                      PANEL_CLIENT_DATA, 4,
  376. XX                    PANEL_NOTIFY_PROC, button_proc,
  377. XX                    PANEL_LABEL_IMAGE,
  378. XX                    panel_button_image(keypad,
  379. XX                               "4",
  380. XX                               5,
  381. XX                               NULL),
  382. XX                    0);
  383.  
  384. XX    R5_button = panel_create_item(keypad, PANEL_BUTTON,
  385. XX                      PANEL_SHOW_ITEM, FALSE,
  386. XX                      PANEL_CLIENT_DATA, 5,
  387. XX                    PANEL_NOTIFY_PROC, button_proc,
  388. XX                    PANEL_LABEL_IMAGE,
  389. XX                    panel_button_image(keypad,
  390. XX                               "5",
  391. XX                               5,
  392. XX                               NULL),
  393. XX                    0);
  394.  
  395. XX    R6_button = panel_create_item(keypad, PANEL_BUTTON,
  396. XX                      PANEL_SHOW_ITEM, FALSE,
  397. XX                      PANEL_CLIENT_DATA, 6,
  398. XX                    PANEL_NOTIFY_PROC, button_proc,
  399. XX                    PANEL_LABEL_IMAGE,
  400. XX                    panel_button_image(keypad,
  401. XX                               "6",
  402. XX                               5,
  403. XX                               NULL),
  404. XX                    0);
  405.  
  406. XX    comma_button = panel_create_item(keypad, PANEL_BUTTON,
  407. XX                     PANEL_SHOW_ITEM, FALSE,
  408. XX                     PANEL_CLIENT_DATA, 16,
  409. XX                    PANEL_NOTIFY_PROC, button_proc,
  410. XX                    PANEL_LABEL_IMAGE,
  411. XX                    panel_button_image(keypad,
  412. XX                               ",",
  413. XX                               5,
  414. XX                               NULL),
  415. XX                    0);
  416.  
  417. XX    R1_button = panel_create_item(keypad, PANEL_BUTTON,
  418. XX                      PANEL_SHOW_ITEM, FALSE,
  419. XX                      PANEL_CLIENT_DATA, 1,
  420. XX                    PANEL_NOTIFY_PROC, button_proc,
  421. XX                    PANEL_LABEL_IMAGE,
  422. XX                    panel_button_image(keypad,
  423. XX                               "1",
  424. XX                               5,
  425. XX                               NULL),
  426. XX                    0);
  427.  
  428. XX    R2_button = panel_create_item(keypad, PANEL_BUTTON,
  429. XX                      PANEL_SHOW_ITEM, FALSE,
  430. XX                      PANEL_CLIENT_DATA, 2,
  431. XX                    PANEL_NOTIFY_PROC, button_proc,
  432. XX                    PANEL_LABEL_IMAGE,
  433. XX                    panel_button_image(keypad,
  434. XX                               "2",
  435. XX                               5,
  436. XX                               NULL),
  437. XX                    0);
  438.  
  439. XX    R3_button = panel_create_item(keypad, PANEL_BUTTON,
  440. XX                      PANEL_SHOW_ITEM, FALSE,
  441. XX                      PANEL_CLIENT_DATA, 3,
  442. XX                    PANEL_NOTIFY_PROC, button_proc,
  443. XX                    PANEL_LABEL_IMAGE,
  444. XX                    panel_button_image(keypad,
  445. XX                               "3",
  446. XX                               5,
  447. XX                               NULL),
  448. XX                    0);
  449. XX    enter_button = panel_create_item(keypad, PANEL_BUTTON,
  450. XX                     PANEL_SHOW_ITEM, FALSE,
  451. XX                     PANEL_CLIENT_DATA, 17,
  452. XX                    PANEL_NOTIFY_PROC, button_proc,
  453. XX                    PANEL_LABEL_IMAGE,
  454. XX                    panel_button_image(keypad,
  455. XX                               "Enter",
  456. XX                               5,
  457. XX                               NULL),
  458. XX                    0);
  459. XX    R0_button = panel_create_item(keypad, PANEL_BUTTON,
  460. XX                      PANEL_SHOW_ITEM, FALSE,
  461. XX                      PANEL_CLIENT_DATA, 10,
  462. XX                    PANEL_NOTIFY_PROC, button_proc,
  463. XX                    PANEL_LABEL_IMAGE,
  464. XX                    panel_button_image(keypad,
  465. XX                               "0",
  466. XX                               13,
  467. XX                               NULL),
  468. XX                    0);
  469.  
  470. XX    dot_button = panel_create_item(keypad, PANEL_BUTTON,
  471. XX                       PANEL_SHOW_ITEM, FALSE,
  472. XX                       PANEL_CLIENT_DATA, 18,
  473. XX                    PANEL_NOTIFY_PROC, button_proc,
  474. XX                    PANEL_LABEL_IMAGE,
  475. XX                    panel_button_image(keypad,
  476. XX                               ".",
  477. XX                               5,
  478. XX                               NULL),
  479. XX                    0);
  480.  
  481. XX    arrowsw = panel_create(tool,  0);
  482. XX    arrow = (Panel) arrowsw->ts_data;
  483.  
  484. XX    up_button = panel_create_item(arrow, PANEL_BUTTON,
  485. XX                      PANEL_SHOW_ITEM, FALSE,
  486. XX                      PANEL_CLIENT_DATA, 19,
  487. XX                      PANEL_ITEM_X, PANEL_CU(8),
  488. XX                      PANEL_ITEM_Y, PANEL_CU(1),
  489. XX                      PANEL_NOTIFY_PROC, button_proc,
  490. XX                      PANEL_LABEL_IMAGE,
  491. XX                      panel_button_image(arrow,
  492. XX                             "^",
  493. XX                             5,
  494. XX                             NULL),
  495. XX                      0);
  496. XX    down_button = panel_create_item(arrow, PANEL_BUTTON,
  497. XX                    PANEL_SHOW_ITEM, FALSE,
  498. XX                    PANEL_CLIENT_DATA, 21,
  499. XX                    PANEL_ITEM_X, PANEL_CU(8),
  500. XX                    PANEL_ITEM_Y, PANEL_CU(3),
  501. XX                    PANEL_NOTIFY_PROC, button_proc,
  502. XX                    PANEL_LABEL_IMAGE,
  503. XX                    panel_button_image(arrow,
  504. XX                               "v",
  505. XX                               5,
  506. XX                               NULL),
  507. XX                    0);
  508. XX    left_button = panel_create_item(arrow, PANEL_BUTTON,
  509. XX                    PANEL_SHOW_ITEM, FALSE,
  510. XX                    PANEL_CLIENT_DATA, 22,
  511. XX                    PANEL_ITEM_X, PANEL_CU(2),
  512. XX                    PANEL_ITEM_Y, PANEL_CU(2),
  513. XX                    PANEL_NOTIFY_PROC, button_proc,
  514. XX                    PANEL_LABEL_IMAGE,
  515. XX                    panel_button_image(arrow,
  516. XX                               "<--",
  517. XX                               5,
  518. XX                               NULL),
  519. XX                    0);
  520. XX    right_button = panel_create_item(arrow, PANEL_BUTTON,
  521. XX                     PANEL_SHOW_ITEM, FALSE,
  522. XX                     PANEL_CLIENT_DATA, 20,
  523. XX                     PANEL_ITEM_X, PANEL_CU(15),
  524. XX                     PANEL_ITEM_Y, PANEL_CU(2),
  525. XX                    PANEL_NOTIFY_PROC, button_proc,
  526. XX                    PANEL_LABEL_IMAGE,
  527. XX                    panel_button_image(arrow,
  528. XX                               "-->",
  529. XX                               5,
  530. XX                               NULL),
  531. XX                    0);
  532. XX    panel_fit_height(arrow);
  533.  
  534.  
  535.  
  536. XX    label_setup();
  537.  
  538.  
  539. XX        /*
  540. XX     * Install tool in tree of windows
  541. XX     */
  542. XX    signal(SIGWINCH, sigwinchcatcher);
  543. XX    tool_install(tool);
  544.  
  545. XX    /*
  546. XX     * Start tty process
  547. XX     */
  548. XX    signal(SIGCHLD, sigchldcatcher);
  549. XX    signal(SIGTERM, sigtermcatcher);
  550.  
  551. XX    if (ttysw_fork(ttysw->ts_data, ++argv,
  552. XX        &ttysw->ts_io.tio_inputmask,
  553. XX        &ttysw->ts_io.tio_outputmask,
  554. XX        &ttysw->ts_io.tio_exceptmask) == -1) {
  555. XX        perror("vt100tool");
  556. XX        exit(1);
  557. XX    }
  558. XX    /*
  559. XX     * Handle input
  560. XX     */
  561. XX    tool_select(tool, 1 /* means wait for child process to die*/);
  562. XX    /*
  563. XX     * Cleanup
  564. XX     */
  565. XX    tool_destroy(tool);
  566. XX    exit(0);
  567. XX}
  568.  
  569. XXstatic
  570. XXsigchldcatcher()
  571. XX{
  572. XX    tool_sigchld(tool);
  573. XX}
  574.  
  575. XXstatic
  576. XXsigwinchcatcher()
  577. XX{
  578. XX    tool_sigwinch(tool);
  579. XX}
  580.  
  581. XXstatic
  582. XXsigtermcatcher()
  583. XX{
  584. XX    ttysw_done(ttysw->ts_data);
  585. XX    exit(0);
  586. XX}
  587. XXstatic int insetup = 0;
  588. XXstatic int inkeyboard = 0;
  589.  
  590. XXstatic
  591. XXsetup_proc(item,event)
  592. XX     Panel_item item;
  593. XX     struct inputevent *event;
  594. XX{
  595. XX  if(insetup == 0)
  596. XX    {
  597. XX      panel_set(local_choice,PANEL_SHOW_ITEM,TRUE,0);
  598. XX      panel_set(scroll_choice,PANEL_SHOW_ITEM,TRUE,0);
  599. XX      panel_set(screen_choice,PANEL_SHOW_ITEM,TRUE,0);
  600. XX      panel_set(cursor_choice,PANEL_SHOW_ITEM,TRUE,0);
  601. XX      panel_set(xon_choice,PANEL_SHOW_ITEM,TRUE,0);
  602. XX      panel_set(ansi_choice,PANEL_SHOW_ITEM,TRUE,0);
  603. XX      panel_set(wrap_choice,PANEL_SHOW_ITEM,TRUE,0);
  604. XX      panel_set(newline_choice,PANEL_SHOW_ITEM,TRUE,0);
  605. XX      panel_set(answerback_text,PANEL_SHOW_ITEM,TRUE,0);
  606. XX      panel_set(baud_rate,PANEL_SHOW_ITEM,TRUE,0);
  607. XX      insetup = 1;
  608. XX    }
  609. XX  else
  610. XX    {
  611. XX      panel_set(local_choice,PANEL_SHOW_ITEM,FALSE,0);
  612. XX      panel_set(scroll_choice,PANEL_SHOW_ITEM,FALSE,0);
  613. XX      panel_set(screen_choice,PANEL_SHOW_ITEM,FALSE,0);
  614. XX      panel_set(cursor_choice,PANEL_SHOW_ITEM,FALSE,0);
  615. XX      panel_set(xon_choice,PANEL_SHOW_ITEM,FALSE,0);
  616. XX      panel_set(ansi_choice,PANEL_SHOW_ITEM,FALSE,0);
  617. XX      panel_set(wrap_choice,PANEL_SHOW_ITEM,FALSE,0);
  618. XX      panel_set(newline_choice,PANEL_SHOW_ITEM,FALSE,0);
  619. XX      panel_set(answerback_text,PANEL_SHOW_ITEM,FALSE,0);
  620. XX      panel_set(baud_rate,PANEL_SHOW_ITEM,FALSE,0);
  621. XX      strcpy(answer_message,(char*) panel_get_value(answerback_text));
  622. XX      insetup = 0;
  623. XX    }
  624. XX}
  625.  
  626. XX/* Toggle the appearance of the panel keyboard */
  627.  
  628. XXstatic
  629. XXkeyboard_proc(item,event)
  630. XX     Panel_item item;
  631. XX     struct inputevent *event;
  632. XX{
  633. XX  if(inkeyboard == 0)
  634. XX    {
  635. XX      panel_set(PF1_button,PANEL_SHOW_ITEM,TRUE,0);
  636. XX      panel_set(PF2_button,PANEL_SHOW_ITEM,TRUE,0);
  637. XX      panel_set(PF3_button,PANEL_SHOW_ITEM,TRUE,0);
  638. XX      panel_set(PF4_button,PANEL_SHOW_ITEM,TRUE,0);
  639. XX      panel_set( R7_button,PANEL_SHOW_ITEM,TRUE,0);
  640. XX      panel_set( R8_button,PANEL_SHOW_ITEM,TRUE,0);
  641. XX      panel_set( R9_button,PANEL_SHOW_ITEM,TRUE,0);
  642. XX      panel_set( minus_button,PANEL_SHOW_ITEM,TRUE,0);
  643. XX      panel_set( R4_button,PANEL_SHOW_ITEM,TRUE,0);
  644. XX      panel_set( R5_button,PANEL_SHOW_ITEM,TRUE,0);
  645. XX      panel_set( R6_button,PANEL_SHOW_ITEM,TRUE,0);
  646. XX      panel_set( comma_button,PANEL_SHOW_ITEM,TRUE,0);
  647. XX      panel_set( R1_button,PANEL_SHOW_ITEM,TRUE,0);
  648. XX      panel_set( R2_button,PANEL_SHOW_ITEM,TRUE,0);
  649. XX      panel_set( R3_button,PANEL_SHOW_ITEM,TRUE,0);
  650. XX      panel_set( R0_button,PANEL_SHOW_ITEM,TRUE,0);
  651. XX      panel_set( dot_button,PANEL_SHOW_ITEM,TRUE,0);
  652. XX      panel_set( enter_button,PANEL_SHOW_ITEM,TRUE,0);
  653. XX      panel_set( up_button,PANEL_SHOW_ITEM,TRUE,0);
  654. XX      panel_set( down_button,PANEL_SHOW_ITEM,TRUE,0);
  655. XX      panel_set( right_button,PANEL_SHOW_ITEM,TRUE,0);
  656. XX      panel_set( left_button,PANEL_SHOW_ITEM,TRUE,0);
  657. XX      inkeyboard = 1;
  658. XX    }
  659. XX  else
  660. XX    {
  661. XX      panel_set(PF1_button,PANEL_SHOW_ITEM,FALSE,0);
  662. XX      panel_set(PF2_button,PANEL_SHOW_ITEM,FALSE,0);
  663. XX      panel_set(PF3_button,PANEL_SHOW_ITEM,FALSE,0);
  664. XX      panel_set(PF4_button,PANEL_SHOW_ITEM,FALSE,0);
  665. XX      panel_set( R7_button,PANEL_SHOW_ITEM,FALSE,0);
  666. XX      panel_set( R8_button,PANEL_SHOW_ITEM,FALSE,0);
  667. XX      panel_set( R9_button,PANEL_SHOW_ITEM,FALSE,0);
  668. XX      panel_set( minus_button,PANEL_SHOW_ITEM,FALSE,0);
  669. XX      panel_set( R4_button,PANEL_SHOW_ITEM,FALSE,0);
  670. XX      panel_set( R5_button,PANEL_SHOW_ITEM,FALSE,0);
  671. XX      panel_set( R6_button,PANEL_SHOW_ITEM,FALSE,0);
  672. XX      panel_set( comma_button,PANEL_SHOW_ITEM,FALSE,0);
  673. XX      panel_set( R1_button,PANEL_SHOW_ITEM,FALSE,0);
  674. XX      panel_set( R2_button,PANEL_SHOW_ITEM,FALSE,0);
  675. XX      panel_set( R3_button,PANEL_SHOW_ITEM,FALSE,0);
  676. XX      panel_set( R0_button,PANEL_SHOW_ITEM,FALSE,0);
  677. XX      panel_set( dot_button,PANEL_SHOW_ITEM,FALSE,0);
  678. XX      panel_set( enter_button,PANEL_SHOW_ITEM,FALSE,0);
  679. XX      panel_set( up_button,PANEL_SHOW_ITEM,FALSE,0);
  680. XX      panel_set( down_button,PANEL_SHOW_ITEM,FALSE,0);
  681. XX      panel_set( right_button,PANEL_SHOW_ITEM,FALSE,0);
  682. XX      panel_set( left_button,PANEL_SHOW_ITEM,FALSE,0);
  683. XX      inkeyboard = 0;
  684. XX    }
  685. XX}
  686.  
  687. XX/* What to do when a button is clicked */
  688. XX/* Since the meaning of the keys is a function of variables set in
  689. XX   the vt100 environment, this routine uses the translator which
  690. XX   is used to interpret real sun-2 keyboard actions: translate_key()
  691. XX*/
  692.  
  693. XXstatic
  694. XXbutton_proc(item, event)
  695. XX     Panel_item item;
  696. XX     struct inputevent event;
  697. XX{
  698. XX  int button_pushed = 0;
  699. XX  extern  struct ttysubwindow  *_ttysw;
  700. XX  char * keystr;
  701. XX  button_pushed = (int) panel_get(item, PANEL_CLIENT_DATA);
  702. XX  switch (button_pushed)
  703. XX    {
  704. XX    case 11:
  705. XX      keystr = translate_key(KEY_RIGHT(1));
  706. XX      break;
  707. XX    case 12:
  708. XX      keystr = translate_key(KEY_RIGHT(2));
  709. XX      break;
  710. XX    case 13:
  711. XX      keystr = translate_key(KEY_RIGHT(3));
  712. XX      break;
  713. XX    case 7:
  714. XX      keystr = translate_key(KEY_RIGHT(4));
  715. XX      break;
  716. XX    case 8:
  717. XX      keystr = translate_key(KEY_RIGHT(5));
  718. XX      break;
  719. XX    case 9:
  720. XX      keystr = translate_key(KEY_RIGHT(6));
  721. XX      break;
  722. XX    case 4:
  723. XX      keystr = translate_key(KEY_RIGHT(7));
  724. XX      break;
  725. XX    case 5:
  726. XX      keystr = translate_key(KEY_RIGHT(8));
  727. XX      break;
  728. XX    case 6:
  729. XX      keystr = translate_key(KEY_RIGHT(9));
  730. XX      break;
  731. XX    case 1:
  732. XX      keystr = translate_key(KEY_RIGHT(10));
  733. XX      break;
  734. XX    case 2:
  735. XX      keystr = translate_key(KEY_RIGHT(11));
  736. XX      break;
  737. XX    case 3:
  738. XX      keystr = translate_key(KEY_RIGHT(12));
  739. XX      break;
  740. XX    case 10:
  741. XX      keystr = translate_key(KEY_RIGHT(13));
  742. XX      break;
  743. XX    case 18:
  744. XX      keystr = translate_key(KEY_RIGHT(14));
  745. XX      break;
  746. XX    case 17:
  747. XX      keystr = translate_key(KEY_RIGHT(15));
  748. XX      break;
  749. XX    case 19:
  750. XX      keystr = translate_key(KEY_TOP(3));
  751. XX      break;
  752. XX    case 21:
  753. XX      keystr = translate_key(KEY_TOP(4));
  754. XX      break;
  755. XX    case 22:
  756. XX      keystr = translate_key(KEY_TOP(5));
  757. XX      break;
  758. XX    case 20:
  759. XX      keystr = translate_key(KEY_TOP(6));
  760. XX      break;
  761. XX    case 14:
  762. XX      keystr = translate_key(KEY_TOP(7));
  763. XX      break;
  764. XX    case 15:
  765. XX      keystr = translate_key(KEY_TOP(8));
  766. XX      break;
  767. XX    case 16:
  768. XX      keystr = translate_key(KEY_TOP(9));
  769. XX      break;
  770. XX    default:
  771. XX      keystr = "";
  772. XX   }
  773. XX  if(local)
  774. XX    ttysw_output(_ttysw,keystr,strlen(keystr));
  775. XX  else
  776. XX    {
  777. XX      write(_ttysw->ttysw_pty,keystr, strlen(keystr));
  778. XX      /* Sorry about this hack */
  779. XX      /* We have to fake out the ttysw_input routine */
  780. XX      /* since it only queues up the input till the next */
  781. XX      /* real input event. We will actually write to the */
  782. XX      /* pty and not put the text into the input queue.*/
  783. XX    }
  784.  
  785. XX}
  786.  
  787.  
  788.  
  789. XXstatic
  790. XXlocal_proc(item,value,event)
  791. XX     Panel_item item;
  792. XX     int value;
  793. XX     struct inputevent event;
  794. XX{
  795. XX  local = value;
  796. XX}
  797.  
  798. XXstatic
  799. XXscroll_proc(item,value,event)
  800. XX     Panel_item item;
  801. XX     int value;
  802. XX     struct inputevent event;
  803. XX{
  804. XX}
  805. XXstatic
  806. XXscreen_proc(item,value,event)
  807. XX     Panel_item item;
  808. XX     int value;
  809. XX     struct inputevent event;
  810. XX{
  811. XX/* Never could get this to work right!
  812.  
  813. XX  (value == 0) ? pw_whiteonblack(tool->tl_pixwin, 0, 1)
  814. XX    :pw_blackonwhite(tool->tl_pixwin,0 , 1);
  815. XX  (value == 0) ? rev_screen = 0:1;
  816. XX  pw_writebackground(tool->tl_pixwin, 0, 0,
  817. XX             winwidthp, winheightp, PIX_NOT(PIX_DST));
  818. XX*/
  819. XX}
  820.  
  821.  
  822. XXstatic
  823. XXcursor_proc(item,value,event)
  824. XX     Panel_item item;
  825. XX     int value;
  826. XX     struct inputevent event;
  827. XX{
  828. XX}
  829. XXstatic
  830. XXxon_proc(item,value,event)
  831. XX     Panel_item item;
  832. XX     int value;
  833. XX     struct inputevent event;
  834. XX{
  835. XX}
  836. XXstatic
  837. XXansi_proc(item,value,event)
  838. XX     Panel_item item;
  839. XX     int value;
  840. XX     struct inputevent event;
  841. XX{
  842. XX}
  843. XXstatic
  844. XXwrap_proc(item,value,event)
  845. XX     Panel_item item;
  846. XX     int value;
  847. XX     struct inputevent event;
  848. XX{
  849. XX  wrap = value;
  850. XX}
  851. XXstatic
  852. XXnewline_proc(item,value,event)
  853. XX     Panel_item item;
  854. XX     int value;
  855. XX     struct inputevent event;
  856. XX{
  857. XX  newline = value;
  858. XX}
  859. XXstatic
  860. XXsize_proc(item,value,event)
  861. XX     Panel_item item;
  862. XX     int value;
  863. XX     struct inputevent event;
  864. XX{
  865. XX  big_screen = value;
  866. XX}
  867.  
  868. XXstatic
  869. XXbaud_rate_proc(item,value,event)
  870. XX     Panel_item item;
  871. XX     int value;
  872. XX     struct inputevent event;
  873. XX{
  874. XX}
  875.  
  876. XXstatic
  877. XXlabel_setup()
  878. XX{
  879. XX  keys[(int)panel_get(PF1_button,PANEL_CLIENT_DATA)].button_handle = PF1_button;
  880. XX  keys[(int)panel_get(PF2_button,PANEL_CLIENT_DATA)].button_handle = PF2_button;
  881. XX  keys[(int)panel_get(PF3_button,PANEL_CLIENT_DATA)].button_handle = PF3_button;
  882. XX  keys[(int)panel_get(PF4_button,PANEL_CLIENT_DATA)].button_handle = PF4_button;
  883. XX   keys[(int)panel_get(R7_button,PANEL_CLIENT_DATA)].button_handle = R7_button;
  884. XX   keys[(int)panel_get(R8_button,PANEL_CLIENT_DATA)].button_handle = R8_button;
  885. XX   keys[(int)panel_get(R9_button,PANEL_CLIENT_DATA)].button_handle = R9_button;
  886. XX   keys[(int)panel_get(minus_button,PANEL_CLIENT_DATA)].button_handle = minus_button;
  887. XX   keys[(int)panel_get(R4_button,PANEL_CLIENT_DATA)].button_handle = R4_button;
  888. XX   keys[(int)panel_get(R5_button,PANEL_CLIENT_DATA)].button_handle = R5_button;
  889. XX   keys[(int)panel_get(R6_button,PANEL_CLIENT_DATA)].button_handle = R6_button;
  890. XX   keys[(int)panel_get(comma_button,PANEL_CLIENT_DATA)].button_handle = comma_button;
  891. XX   keys[(int)panel_get(R1_button,PANEL_CLIENT_DATA)].button_handle = R1_button;
  892. XX   keys[(int)panel_get(R2_button,PANEL_CLIENT_DATA)].button_handle = R2_button;
  893. XX   keys[(int)panel_get(R3_button,PANEL_CLIENT_DATA)].button_handle = R3_button;
  894. XX   keys[(int)panel_get(R0_button,PANEL_CLIENT_DATA)].button_handle = R0_button;
  895. XX   keys[(int)panel_get(dot_button,PANEL_CLIENT_DATA)].button_handle = dot_button;
  896. XX   keys[(int)panel_get(enter_button,PANEL_CLIENT_DATA)].button_handle = enter_button;
  897. XX   keys[(int)panel_get(up_button,PANEL_CLIENT_DATA)].button_handle = up_button;
  898. XX   keys[(int)panel_get(down_button,PANEL_CLIENT_DATA)].button_handle = down_button;
  899. XX   keys[(int)panel_get(right_button,PANEL_CLIENT_DATA)].button_handle = right_button;
  900. XX   keys[(int)panel_get(left_button,PANEL_CLIENT_DATA)].button_handle = left_button;
  901. XX}
  902.  
  903. XXstatic
  904. XXlabel_proc(item,value,event)
  905. XX     Panel_item item;
  906. XX     int value;
  907. XX     struct inputevent event;
  908. XX{
  909. XX  int i;
  910. XX  switch (value){
  911. XX  case 0:
  912. XX    for(i = 1; i <= 22; i++)
  913. XX      panel_set(keys[i].button_handle,
  914. XX        PANEL_LABEL_IMAGE, panel_button_image(keypad,
  915. XX                               keys[i].norm_label,
  916. XX                               (i == 10)?13:5,
  917. XX                               NULL),
  918. XX        0);
  919. XX    break;
  920. XX  case 2:
  921. XX    for(i = 1; i <= 22; i++)
  922. XX      panel_set(keys[i].button_handle,
  923. XX        PANEL_LABEL_IMAGE,panel_button_image(keypad,
  924. XX                              keys[i].mred_label,
  925. XX                              (i == 10)?13:5,
  926. XX                              NULL),
  927. XX        0);
  928. XX    break;
  929. XX  case 1:
  930. XX    for(i = 1; i <= 22; i++)
  931. XX      panel_set(keys[i].button_handle,
  932. XX        PANEL_LABEL_IMAGE, panel_button_image(keypad,
  933. XX                               keys[i].ibm_label,
  934. XX                               (i ==10)?13 : 5,
  935. XX                               NULL),
  936. XX        0);
  937. XX    break;
  938. XX  case 3:
  939. XX    for(i = 1; i <= 22; i++)
  940. XX      panel_set(keys[i].button_handle,
  941. XX        PANEL_LABEL_IMAGE, panel_button_image(keypad,
  942. XX                               keys[i].wd11_label,
  943. XX                               (i ==10)?13 : 5,
  944. XX                               NULL),
  945. XX        0);
  946. XX    break;
  947. XX  case 4:
  948. XX    for(i = 1; i <= 22; i++)
  949. XX      panel_set(keys[i].button_handle,
  950. XX        PANEL_LABEL_IMAGE, panel_button_image(keypad,
  951. XX                               keys[i].emacs_label,
  952. XX                               (i ==10)?13 : 5,
  953. XX                               NULL),
  954. XX        0);
  955. XX    break;
  956. XX    
  957. XX  }
  958. XX}
  959.  
  960. XXstatic
  961. XXnorm_proc(item, value,event)
  962. XX     Panel_item item;
  963. XX     int value;
  964. XX     struct inputevent event;
  965.  
  966. XX{}
  967. @//E*O*F vt100tool.c//
  968. chmod u=r,g=r,o=r vt100tool.c
  969.  
  970. echo Inspecting for damage in transit...
  971. temp=/tmp/sharin$$; dtemp=/tmp/sharout$$
  972. trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
  973. cat > $temp <<\!!!
  974.      939    1787   25546 vt100tool.c
  975. !!!
  976. wc  vt100tool.c | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
  977. if test -s $dtemp
  978. then echo "Ouch [diff of wc output]:" ; cat $dtemp
  979. else echo "No problems found."
  980. fi
  981. exit 0
  982.